/******************************************************************************
 * (C) 671643387@qq.com
 */

#ifndef APPLE_THREADPOOL_H
#define APPLE_THREADPOOL_H

#include <list>

namespace Shared {
    namespace Net {

        /**
         * 网络会话
         */
        class Session;

        /**
         * 网络线程
         */
        class Thread;

        /**
         * 网络线程池
         */
        class ThreadPool {
        public:
            ThreadPool(void);
            ~ThreadPool(void);

            /**
             * 设置当前线程数量
             * @param nThread
             */
            void setCurTherad(int nThread);

            /**
             * 将会话绑定到线程池
             * @param session
             */
            void addSession(Session* session);

            /**
             * 停止线程池
             */
            void stop(void);

            /**
             * 等待线程池线程退出
             */
            void join(void);

            /**
             * 获取默认的线程池
             * @return
             */
            static ThreadPool* defaultPool(void);

        private:
            /**
             * 查找最空闲的线程
             * @return
             */
            Thread* findMostFreeThread(void);

        private:
            int _curThreads;
            std::list<Thread*> _threads;
        };

    }
}


#endif //APPLE_THREADPOOL_H
